#pragma once  
#include <iostream>    
#include <unistd.h>   
#include <functional>   

/*---------------------------------------【任务形式2：基于std::function的无参无返回值任务类型定义】---------------------------------------*/
//1.使用using关键字给类型起别名 ---> task_t 本质是 std::function<void()>
using task_t = std::function<void()>;

//2.模拟一个下载任务（符合task_t类型签名：无参、返回值void）
void Download()
{
    std::cout << "我是一个下载任务..." << std::endl;
    sleep(3); // 模拟下载任务的耗时操作
}

/*---------------------------------------【任务形式1：基于类的结构化任务类型】---------------------------------------*/
/*
*   核心特点：将任务的输入数据、执行逻辑、输出结果封装在一个类中，结构清晰
*   适用范围：适用于任务有明确输入参数（如_x、_y）和输出结果（如_result）的场景
*/

class Task
{
private:
    //1.任务输入参数1：参与计算的第一个数
    //2.任务输入参数2：参与计算的第二个数
    //3.任务输出结果：存储Execute执行后的计算结果

    int _x;     
    int _y;      
    int _result; 

public:
    /*---------------------------构造函数---------------------------*/
    //1.“无参构造函数” ---> 创建默认初始化的任务对象（输入参数为默认值）
    Task(){}

    //2.“带参构造函数” ---> 初始化任务的输入参数（_x和_y为任务的计算数据）
    Task(int x, int y):_x(x), _y(y)
    {}


    /*---------------------------核心函数---------------------------*/
    //3.任务执行函数 ---> 定义任务的核心逻辑（此处为两数相加）
    void Execute()
    {
        _result = _x + _y;
    }


    /*---------------------------get方法---------------------------*/
    //4.获取任务的第一个输入参数_x（只读，外部无法修改内部数据）
    int X() { return _x; }

    //5.获取任务的第二个输入参数_y（只读）
    int Y() { return _y; }

    //6.获取任务执行后的结果_result（需在Execute调用后获取，否则为随机值）
    int Result(){ return _result; }
};